#include "querywidget.h"
#include "ui_querywidget.h"

QueryWidget::QueryWidget(QWidget *parent,const QSqlDatabase &db_) :
    BaseEditor(parent),
    ui(new Ui::QueryWidget)
{
    ui->setupUi(this);

    db=db_;
    queryModel=new QSqlQueryModel(this);
    ui->tableView->setModel(queryModel);
    createMenu();
}

QueryWidget::~QueryWidget()
{
    delete ui;
}

void QueryWidget::prepareStatement(const QMap<QString, QString> &map)
{
    statementMap=map;
    updateView();
}

void QueryWidget::generateMenu()
{
    menu->addAction("按编码查询 (F2)",this,&QueryWidget::queryByCode);
    menu->addAction("按名称查询 (F3)",this,&QueryWidget::queryByName);
    menu->addSeparator();
    menu->addAction("更新视图 (F5)",this,&QueryWidget::updateView);
}

void QueryWidget::keyPressEvent(QKeyEvent *event)
{
    switch (event->key()) {
    case Qt::Key_F2:
        queryByCode();
        break;
    case Qt::Key_F3:
        queryByName();
        break;
    case Qt::Key_F5:
        updateView();
        break;
    }
}

void QueryWidget::queryByName()
{
    auto input=QInputDialog::getText(this,"输入名称","名称").trimmed();
    if(input.isEmpty())
        return;

    QString sql=statementMap.value("queryByName").arg(input);
    query(sql);
}

void QueryWidget::queryByCode()
{
    auto input=QInputDialog::getText(this,"输入编码","编码").trimmed();
    if(input.isEmpty())
        return;

    QString sql=statementMap.value("queryByCode").arg(input);
    query(sql);
}

void QueryWidget::query(const QString &sql)
{
    if(sql.isEmpty())
        return;

    emit transferLog(sql);
    queryModel->setQuery(sql,db);
    setHeaderData();
}

void QueryWidget::updateView()
{
    QString sql=statementMap.value("query");
    query(sql);
}

void QueryWidget::setHeaderData()
{
    QString column=statementMap.value("columns_CN");
    QStringList items=column.split("，");
    for (int i = 0; i < items.size(); i++) {
        queryModel->setHeaderData(i,Qt::Horizontal,items.at(i));
    }
    if(queryModel->rowCount() > 0)
        ui->tableView->resizeColumnsToContents();
}

void QueryWidget::on_tableView_doubleClicked(const QModelIndex &index)
{
    if(index.isValid())
    {
        QString item=index.data().toString();
        if(item.isEmpty())
            return;

        qApp->clipboard()->setText(item);
        emit showMessage(item + " 已复制到粘贴板");
    }
}
